package dao;

import java.sql.SQLException;
import java.util.List;

/**
 * Toutes les méthodes d'accès à la base de données
 * peuvent lever une SQLException : soit l'accès réussit,
 * soit il échoue. C'est à l'appelant (l'IHM en général)
 * de capturer l'exception SQL, voire d'examiner son code
 * erreur SQL (donné par le SGBD) pour produire le message
 * d'erreur adéquat.
 * @author plasse
 */
public interface IDAO<T> {
  /** Element de id passé en paramètre. Utile pour les
   * entités. Pour les tables ayant plusieurs colonnes
   * en clé primaire, surcharger en lireParIds(id1, id2).
   * @param id
   * @return
   */
  public T lireParId(int id) throws SQLException;

  /** Lister les éléments. Ceci n'est utile que
   * lorsque le nombre d'éléments est réduit (quelques
   * dizanes). Au-delà, prévoir filtres et pagination
   * à travers des surcharges de cette méthode.
   * @return
   * @throws SQLException
   */
  public List<T> lister() throws SQLException;

  /** Insérer un élément en base */
  public void inserer(T element) throws SQLException;

  /** Modifier l'élément dans la base de données, en
   * se basant sur son id. REQUIERT <code>element != null</code>.
   */
  public void modifier(T element) throws SQLException;

  /** Supprimer l'élément de id donné */
  public void supprimer(int id) throws SQLException;
}
